<script>
	// 小程序
	import TIM from 'tim-wx-sdk';
	import COS from 'cos-wx-sdk-v5';
	import Aegis from 'aegis-mp-sdk';

	import {
		mapState
	} from 'vuex'

	import logger from '@/subpkg/tim/utils/logger.js'; // app.js
	import {
		genTestUserSig
	} from '@/subpkg/tim/debug/GenerateTestUserSig.js';

	const aegis = new Aegis({
		id: 'iHWefAYqKznuxWjLnr', // 项目key
		reportApiSpeed: true, // 接口测速
	});
	uni.$aegis = aegis

	export default {
		// 设置全局数据
		globalData: {
			// 用户信息
			userInfo: {

			},
			// 导航的总高度
			navHeight: 0,
			// 胶囊的top位置
			menuButtonTop: 0,
			// 胶囊的高度
			menuButtonHeight: 0,

			// 以下为腾讯云IM的全局数据
			// TIMuserInfo: userID userSig token phone
			TIMuserInfo: null,
			// 个人信息
			userProfile: null,
			isTUIKit: true,
			headerHeight: 0,
			statusBarHeight: 0,
			SDKAppID: genTestUserSig('').sdkAppID
		},

		onLaunch: function() {
			// 以下为腾讯云IM内容
			const SDKAppID = genTestUserSig('').sdkAppID;
			uni.$aegis.reportEvent({
				name: 'onLaunch',
				ext1: 'onLaunch-success',
				ext2: 'uniTuikitExternal',
				ext3: `${SDKAppID}`,
			})
			uni.setStorageSync(`TIM_${SDKAppID}_isTUIKit`, true);
			// 重点注意： 为了 uni-app 更好地接入使用 tim，快速定位和解决问题，请勿修改 uni.$TUIKit 命名。
			// 如果您已经接入 tim ，请将 uni.tim 修改为 uni.$TUIKit。
			uni.$TUIKit = TIM.create({
				SDKAppID: SDKAppID
			});
			uni.$TUIKit.registerPlugin({
				'cos-wx-sdk': COS
			});
			// 如果您已创建了 tim，请将 tim 实例挂载在 wx 上，且不可以修改 wx.$TIM（修改变量可能导致 TUICalling 组件无法正常使用）, 完成 TUICalling 初始化，
			// 如果您没有创建，可以不传
			wx.$TIM = uni.$TUIKit;
			uni.$TUIKitTIM = TIM;
			uni.$TUIKitEvent = TIM.EVENT;
			uni.$TUIKitVersion = TIM.VERSION;
			uni.$TUIKitTypes = TIM.TYPES; // 监听系统级事件
			uni.$resetLoginData = this.resetLoginData();
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_READY, this.onSDKReady);
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_NOT_READY, this.onSdkNotReady);
			uni.$TUIKit.on(uni.$TUIKitEvent.KICKED_OUT, this.onKickedOut);
			uni.$TUIKit.on(uni.$TUIKitEvent.ERROR, this.onTIMError);
			uni.$TUIKit.on(uni.$TUIKitEvent.NET_STATE_CHANGE, this.onNetStateChange);
			uni.$TUIKit.on(uni.$TUIKitEvent.SDK_RELOAD, this.onSDKReload);

			// 初始化云开发
			wx.cloud.init({
				env: 'lost-and-found-7gyn2a47a633be5d',
				traceUser: true
			})

			this.getSystemInfo()
			// 获取结果，判断用户是否已登录
			const hasUserInfo = this.hasUserInfo()
			if (!hasUserInfo) {
				return uni.navigateTo({
					url: '/pages/login/login'
				})
			}
		},

		computed: {
			...mapState({
				// 聊天室的登录转状态,默认状态为false
				isSDKReady: state => state.isSDKReady
			})
		},

		methods: {
			// TODO:
			resetLoginData() {
				this.globalData.expiresIn = '';
				this.globalData.sessionID = '';
				this.globalData.TIMuserInfo = {
					userID: '',
					userSig: '',
					token: '',
					phone: ''
				};
				this.globalData.userProfile = null;
				logger.log(`| app |  resetLoginData | globalData: ${this.globalData}`);
			},
			onTIMError() {},
			onSDKReady({
				name
			}) {
				const isSDKReady = name === uni.$TUIKitEvent.SDK_READY ? true : false
				uni.$emit('isSDKReady', {
					isSDKReady: true
				});
			},
			onNetStateChange() {},
			onSDKReload() {},
			onSdkNotReady() {},
			onKickedOut() {},


			// 函数: 获取手机信息
			getSystemInfo() {
				const systemInfo = uni.getSystemInfoSync()
				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
				this.globalData.navHeight = menuButtonInfo.height + (menuButtonInfo.top - systemInfo.statusBarHeight) * 2 +
					systemInfo.statusBarHeight + 4
				this.globalData.menuButtonTop = menuButtonInfo.top
				this.globalData.menuButtonHeight = menuButtonInfo.height
			},

			// 函数：判断用户是否有登录记录
			hasUserInfo() {
				// 从缓存中获取用户信息
				const userInfo = uni.getStorageSync('userInfo')
				// 判断是否有用户登录信息
				if ((this.globalData.userInfo && this.globalData.userInfo.openid != '') || (userInfo && userInfo.openid !=
						'')) {
					this.globalData.userInfo = userInfo
					return true
				} else {
					return false
				}
			},

			// 生成uuid 唯一名字
			uuid() {
				return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
					let r = Math.random() * 16 | 0,
						v = c == 'x' ? r : (r & 0x3 | 0x8);
					return v.toString(16);
				});
			},

			// SDK不在登录状态提示
			showUp_tips() {
				uni.showModal({
					title: '提示',
					content: '登录超时，请重新登录',
					showCancel: false
				}).then(res => {
					console.log(res);
					if (res[1].confirm) {
						const userInfo = uni.getStorageSync('userInfo')
						userInfo.openid = ''
						uni.setStorageSync('userInfo', userInfo)
						uni.navigateTo({
							url: '/pages/login/login'
						})
					}
				})
			}
		},

		watch: {
			isSDKReady: {
				handler(newValue) {
					const userInfo = uni.getStorageSync('userInfo')
					setTimeout(() => {
						// 获取当前小程序的页面
						const page = getCurrentPages()
						const currentPage = page[0].route
						if (!newValue && currentPage != 'pages/login/login' && currentPage !=
							'pages/login/changePassword' && currentPage != 'pages/login/initialUserInfo' && userInfo.openid != '') {
							this.showUp_tips()
						}
					}, 500)
				},
				immediate: true
			}
		},

		onShow: function() {

		},
		onHide: function() {

		}
	}
</script>

<style lang="scss">
	/*每个页面公共css */
	@import '@/uni_modules/uni-scss/index.scss';

	// 字体颜色浅黑色，主色
	.main-font-color {
		color: #5e5d61;
	}

	// 字体加粗
	.font-weight-bold {
		font-weight: bold;
	}

	// 按钮颜色，蓝色
	.btn-bgcolor {
		background-color: #007aff;
	}

	// 按钮点击颜色，深蓝色
	.btn-click {
		background-color: #0062cc !important;
	}

	// 大屏幕的背景颜色
	.default-bgcolor {
		background-color: #F8F8F8;
	}

	// 首页的小号文字颜色
	.small-font-color {
		color: #999999;
	}

	// 首页小号文字大小
	.small-font-size {
		font-size: 24rpx;
	}
</style>
